home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
tools
/
sharp
/
sxwork3.lzh
/
福袋
/
注釈付ヘッダ
/
SXMEMORY.H
< prev
next >
Wrap
Text File
|
1994-02-20
|
7KB
|
239 lines
/*
* sxmemory.h X68k SX_SYSTEM ver 2.01 Copyright 1994 SHARP/First Class Technology
*/
#ifndef __SXMEMORY_H
#define __SXMEMORY_H
#ifndef __SXDEF2_H
#include <sxdef2.h>
#endif
#ifdef FORWORD
#define __PROTO_TYPE
#endif
#ifdef __STDC__
#define __PROTO_TYPE
#endif
typedef struct Block Block; /* ブロックレコード */
typedef struct Master Master; /* マスターポインタ */
/*
* メモリマン (Memory Man)
*/
/* ブロック属性フラグ */
#define M_RSC (1 << 1) /* リソース属性 */
#define M_MASTER (1 << 2) /* マスターポインタ属性 */
#define M_UNPRG (1 << 3) /* バージ不可属性 */
#define M_LOCK (1 << 4) /* ロック属性 */
#define M_NONREL (1 << 5) /* 再配置不能属性 */
#define M_TRAIL (1 << 6) /* 終端属性 */
#define M_ALLOC (1 << 7) /* 割当済属性 */
enum MMErrorCode { /* メモリマンのエラーコード */
ER_NOMEM = -0x0400, /* ブロックの確保に失敗した */
ER_ODDADR, /* 奇数番地を指している */
ER_ZONEID, /* カレントヒープが異常 */
ER_NULLPTR, /* ポインタがヌルポインタ */
ER_NULLHDL, /* ハンドルがヌルハンドル */
ER_EMPHDL, /* ハンドルが空のハンドル */
ER_NOTFRE, /* フリーブロックでない */
ER_NOTALO, /* 割当済ブロックでない */
ER_NOTNON, /* 再配置不能ブロックでない */
ER_NOTREL, /* 再配置可能ブロックでない */
ER_NOTLOC, /* ロックされたブロックでない */
ER_NOTUNL, /* ロックされていないブロックでない */
ER_NOTPUR, /* パージ可能なブロックでない */
ER_NOTUNP, /* パージ不可なブロックでない */
ER_ILPROP, /* ブロック属性の指定が異常 */
ER_DIFTYP, /* フリーブロックと割当済ブロックを
連結しようとした */
ER_LESSIZ, /* 初期化のアドレス範囲が小さい */
ER_SPLIT, /* ブロックの分割に失敗した */
ER_SIZEPU /* -0x03ee */ /* パージ可能なブロックの大きさを
変更しようとした */
};
struct Heap { /* ヒープレコード */
long ID; /* ヒープ識別子 */
long version; /* メモリマンのバージョン */
void *heapData; /* ヒープデータの先頭アドレス */
void *trailer; /* 終端ブロックのアドレス */
long moreMst; /* 1度に作成するマスターポインタの数 */
void (*fncCompact)(void); /* 再配置の開始告知関数 */
void (*fncPurge)(Heap *, Handle); /* パージ告知関数 */
void (*fncMelt)(void); /* システム予約 */
int (*fncGrowHeap)(Heap *, long); /* グローヒープ関数 */
long totalFree; /* フリーブロックの総バイト数 */
Master *freeMst; /* フリーマスターポインタのリスト */
Pointer alloc; /* 割り当て時、次に探す位置 */
Pointer spare;
Pointer purge;
char vis;
char pad;
short usrFlag;
long cntMemCompact; /* MMMemCompactを実行した回数 */
long cntMemPurge; /* MMMemPurgeを実行した回数 */
long cntMemMelt; /* MMMemMeltを実行した回数 */
long cntPtrNew; /* MMPtrNewが成功した回数 */
long cntPtrDispose; /* MMPtrDisposeが成功した回数 */
long cntMstBind; /* MMMstBindが成功した回数 */
long cntMstFree; /* MMMstFreeが成功した回数 */
long cntMst; /* 存在するマスターポインタの数 */
long usrWord; /* ユーザーワード */
unsigned char data[_VARLEN]; /* ヒープデータ(可変長データ) */
};
struct Block { /* ブロックレコード */
long physicalSize; /* 物理サイズ */
union {
Heap *toHeap; /* 再配置不能ブロックなら
ヒープへのポインタ */
long relativeHdl; /* 再配置可能ブロックなら
リラティブハンドル */
} u;
unsigned char property; /* ブロック属性 */
unsigned char sizeCorrection; /* サイズコレクション */
short usrFlag; /* ユーザーフラグ */
long usrWord; /* ユーザーワード */
unsigned char data[_VARLEN]; /* ブロックデータ(可変長データ)*/
};
struct Master { /* マスターポインタ */
union {
void *toBlockData; /* ブロックデータの先頭アドレス */
Master *next; /* 次のマスターポインタ */
} u;
short number;
char state;
char pad;
};
#ifdef __PROTO_TYPE
Heap *MMHeapInit(void *, void *, int, int (*)(Heap *, long), BOOLEAN);
Master *MMBlockMstGet(Heap *, Block *);
Block *MMMemCompact(Heap *, long);
Block *MMMemPurge(Heap *, long);
Block *MMMemMelt(Heap *, long);
Block *MMMemReserve(Heap *, long);
long MMMemSizeFree(Heap *);
long MMMemSizeComp(Heap *);
long MMMemSizePurg(Heap *);
long MMMemSizeMelt(Heap *);
int MMMemErrorGet(void);
int MMMemErrorSet(int);
Heap *MMChGet(void);
void MMChSet(Heap *);
Pointer MMChPtrNew(long);
int MMChMstMore(void);
Master *MMChMstNew(void);
_Handle MMChHdlNew(long);
Block *MMChCompact(long);
Block *MMChPurge(long);
Block *MMChMelt(long);
Block *MMChReserve(long);
long MMChFreeSize(void);
int (*MMChGrowHeapGet(void))(Heap *, long);
int (*MMChGrowHeapSet(int (*)(Heap *, long)))(Heap *, long);
void (*MMChPurgeGet(void))(Heap *, _Handle);
void (*MMChPurgeSet(void (*)(Heap *, _Handle)))(Heap *, _Handle);
void (*MMChCompactGet(void))(void);
void (*MMChCompactSet(void (*)(void)))(void);
Pointer MMPtrNew(Heap *, long);
Heap *MMPtrHeap(Pointer);
void MMPtrDispose(Pointer);
long MMPtrSizeGet(Pointer);
int MMPtrSizeSet(Pointer, long);
int MMPtrPropGet(Pointer);
int MMPtrPropSet(Pointer, int);
int MMMstAllocate(Heap *);
Master *MMMstBind(Heap *);
_Handle MMHdlNew(Heap *, long);
Heap *MMHdlHeap(_Handle);
void MMHdlDispose(_Handle);
long MMHdlSizeGet(_Handle);
int MMHdlSizeSet(_Handle, long);
int MMHdlEmpty(_Handle);
int MMHdlRealloc(_Handle, long);
int MMHdlMoveHi(_Handle);
int MMHdlPropGet(_Handle);
int MMHdlPropSet(_Handle, int);
void MMHdlLock(_Handle);
void MMHdlUnlock(_Handle);
void MMHdlPurge(_Handle);
void MMHdlNoPurge(_Handle);
int MMHdlIns(_Handle, long, long);
int MMHdlDel(_Handle, long, long);
Block *MMMemHiReserve(Heap *, long);
Block *MMPtrBlock(Pointer);
Block *MMHdlBlock(_Handle);
Master *MMHdlMstGet(Heap *, void *);
Block *MMChHiReserve(long);
#undef __PROTO_TYPE
#else
Heap *MMHeapInit();
Master *MMBlockMstGet();
Block *MMMemCompact();
Block *MMMemPurge();
Block *MMMemMelt();
Block *MMMemReserve();
long MMMemSizeFree();
long MMMemSizeComp();
long MMMemSizePurg();
long MMMemSizeMelt();
int MMMemErrorGet();
int MMMemErrorSet();
Heap *MMChGet();
void MMChSet();
Pointer MMChPtrNew();
int MMChMstMore();
Master *MMChMstNew();
_Handle MMChHdlNew();
Block *MMChCompact();
Block *MMChPurge();
Block *MMChMelt();
Block *MMChReserve();
long MMChFreeSize();
int (*MMChGrowHeapGet())();
int (*MMChGrowHeapSet())();
void (*MMChPurgeGet())();
void (*MMChPurgeSet())();
void (*MMChCompactGet())();
void (*MMChCompactSet())();
Pointer MMPtrNew();
Heap *MMPtrHeap();
void MMPtrDispose();
long MMPtrSizeGet();
int MMPtrSizeSet();
int MMPtrPropGet();
int MMPtrPropSet();
int MMMstAllocate();
Master *MMMstBind();
_Handle MMHdlNew();
Heap *MMHdlHeap();
void MMHdlDispose();
long MMHdlSizeGet();
int MMHdlSizeSet();
int MMHdlEmpty();
int MMHdlRealloc();
int MMHdlMoveHi();
int MMHdlPropGet();
int MMHdlPropSet();
void MMHdlLock();
void MMHdlUnlock();
void MMHdlPurge();
void MMHdlNoPurge();
int MMHdlIns();
int MMHdlDel();
Block *MMMemHiReserve();
Block *MMPtrBlock();
Block *MMHdlBlock();
Master *MMHdlMstGet();
Block *MMChHiReserve();
#endif __PROTO_TYPE
#endif __SXMEMORY_H